// node 32_判断是否为空的方法.js

//JSON.stringify() 会将 JavaScript 值转换为 JSON 字符串
//trim() 去除字符串前后的空格

//hasOwnProperty() 返回一个布尔值，用来判定对象自身属性中是否具有指定的属性,会忽略原型上的属性


// 1.判断一个对象是否为空对象
// 1.1.判断是否为 null 或者 undefined
let obj = null
if(obj == null){}       //obj为null或者undefined
if(obj === undefined){} //只能判断为undefined
// 1.2.判断空对象{}
// 1.2.1使用for...in遍历
(function (obj) {
    for (var key in obj) { // 如果不为空，则会执行到这一步，返回true
        // if(obj.hasOwnProperty(key)){ //使用hasOwnProperty判定key为来自obj自身，而非原型上的属性
        //     console.log(true)
        //     return
        // }
        console.log(true)
        return
    }
    console.log(false) // 如果为空,返回false
})({});
// 1.2.2通过 JSON 自带的 stringify() 方法来判断
(function (obj) {
    if (JSON.stringify(obj) === '{}') {
        console.log(false) // 如果为空,返回false
        return
    }
    console.log(true) // 如果不为空，则会执行到这一步，返回true
})({});
// 1.2.3使用Object.keys()
let res1_2_3 = Object.keys({})
console.log(res1_2_3.length != 0)//如果c长度为0则为空

// 2.判断空数组
let arr = []
if(arr.length){}//长度为0，则数组为空

// 3.空字符串
let s = ''
if(s === ''){}//之间与''进行比较
if(s.length){}//长度为0，则数组为空

// 4.判断为0或者是NaN
let number1 = 0
console.log( !(Number(number1) && number1) === true )
let number2 = NaN
console.log( !(Number(number2) && number2) === true )
let number3 = 1
console.log( !(Number(number3) && number3) === true )

//!a === true 在a为以下值时成立
// null
// undefined
// ''
// 0 +0 -0
// NaN